###当一个fixture，所有的测试函数都会用到它。就可以用autouse自动让所有的测试函数都请求它，不需要在每个测试函数里显示的请求一遍。

import pytest

@pytest.fixture
def first_entry():
    return "a"


@pytest.fixture
def order(first_entry):
    return []


@pytest.fixture(autouse=True)
def append_first(order, first_entry):
    return order.append(first_entry)  #["a"]



'''
1. 虽然在测试函数里请求了2个fixture函数，但是order拿到的并不是[]，first_entry拿到的也并不是"a"。
2. 因为存在了一个autouse=True的fixture函数，所以append_first先会被调用执行。
3. 在执行append_first过程中，又分别请求了order、 first_entry这2和fixture函数。
4. 接着，append_first对分别拿到的[]和"a"进行append处理，最终返回了["a"]。
5. 最后，在测试函数test_string_only中，order第二次被请求，但是并不会拿到空列表[]（多次调用缓存），而且拿到了被缓存起来的["a"]。first_entry第二次被请求，但是并不会拿到"a"，而且拿到了被缓存起来的["a"]
'''
def test_string_only(order, first_entry):
    assert order == [first_entry]


def test_string_and_int(order, first_entry):
    order.append(2)
    assert order == [first_entry, 2]  ##["a"].append(2)==["a",2]